package org.example.framework.able;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import org.example.framework.dto.PageDTO;

import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 业务能力层
 * 主要处理业务逻辑，例如服务之间调用等，与服务层的主要区别是不与DAO层交互且不处理事务
 * 是controller层与service层的桥梁
 * </p>
 *
 * @author tangxiao
 */
public interface BaseBusinessAble {

    /**
     * 获取服务对象
     *
     * @return IService
     */
    IService getIService();

    /**
     * 进行搜索(支持分页)
     *
     * @param dto
     * @return List<T>
     */
    default <T> PageDTO<List<T>> doSearch(PageDTO<T> dto) {
        return (PageDTO<List<T>>) getIService().page(dto);
    }

    /**
     * 获取单个记录
     *
     * @param dto
     * @return T
     */
    default <T> T doGet(T dto) {
        return (T) getIService().getOne(new QueryWrapper(dto));
    }


    /**
     * 保存记录
     *
     * @param dto
     * @return Boolean
     */
    default <T> Boolean doSave(T dto) {
        return getIService().save(dto);
    }

    /**
     * 根据ID更新单条记录
     *
     * @param id
     * @param dto 待更新的对象 应该只保留可更新的字段，而不是全部字段
     * @return Boolean
     */
    //<T> Boolean updateById(Serializable id, T dto);


    /**
     * 根据ID删除单条记录
     *
     * @param id
     * @return Boolean
     */
    default <T> Boolean doRemoveById(Serializable id) {
        return getIService().removeById(id);
    }

}
